第二章 高性能通讯
一、网络协议
(一)网络协议基本概念
网络协议是用于网络数据交换传输的一套标准与约定
OSI七层模型包括“物理层-数据链路层-网络层-运输层-会话层-表示层-应用层”
由于OSI协议过于复杂现在得到广泛应用的实际上是TCP/IP协议
TCP/IP协议包含以下层,“网络接口层-网际层-运输层-应用层“
应用层中有http协议,SMTP协议(电子邮件),FTP协议(文件传输)
运输层中主要提供应用进程端到端的联通,进行差错检查,主要方法有需要连接的TCP协议与不需要连接的UDP协议
网际层主要是IP协议,负责网络间端到端的联通,分为IPV4(32位)与IPV6协议(126位),IPV6安全性能更高,提供了身份认证和隐私权。
网络接口层是更加底层的部分,如以太网,LAN或者WAN等协议
如果需要获得IP地址的话可以通过接口类提供的静态工厂的方法获得,例如InetAddress address = InetAddress.getByName("www.sina.com.cn)获得新浪的IP地址,不过我们不用new去构建对象,因为InetAddress是一个抽象接口,没有提供public的构造函数
(二)网络协议的差别
TCP:要连接,安全可靠
UDP:不要连接,数据缺失不重发
http:要连接,安全可靠
二、套接字
套接字可以理解成在网络当中交换数据的主机进程之间进行双向通讯的端点,也就是说网络中相互连接的一对主机进行连接和通讯,两端肯定都分别有一个套接字
套接字可以分为以下三种:
流套接字:(TCP套接字)serverSocket和Socket,提供面向连接的,安全可靠的数据传输服务
数据报套接字(multicastSocket和datagramSocket),提供无连接的服务
原生套接字:如果想访问其他协议发送数据必须使用原生套接字(sock_raw)
流
根据一定的路径从源传输到目的地的字节序列称为流
包括输入流:从数据源读取二进制序列
输出流:向目的地写入二进制序列
流工具:inputStreamReader,bufferReader,printwriter
inputStreamReader:将字节流转换成字符流
bufferReader:提供缓冲的字符流读入服务,减少IO操作,提高效率
printWriter:提供字符流写入操作,内部自动实现字符流到字节流的操作
println写入字符,flush执行写入操作,close关闭
三、网络编程
如何找到主机
如何传输数据
tcp编程
一对一
服务器端:新建serversocket监听请求
监听到请求后创建socket作为连接方式
用reader读入,用printwriter输出
客户端,发送连接请求,用printwriter写入,用reader读入
关闭流连接
一对多
服务器端多线程
server监听分配线程调用serverhandler
serverhandler进行流处理和工作,集成runnable接口
UDP编程
用dataGramSocket进行,提供无连接面向数据报的服务,发送和接受的对象都是datagrampacket对象
http编程
基于tcp的应用层协议,建立http连接,有tsl和ssl的是https协议
建立http连接
发送请求行-消息报头和请求体
方法有get和post
服务器接受后进行处理返回
关闭http连接
MINA
框架
Client process-encoder-writer
server decoder-process-encoder-writer
Client (process)decoder-analyse